package view.alumnos;

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;

import model.Alumno;
import model.PersonalAdministrativo;
import model.comunication.IAlumno;
import view.contacto.CrearContacto;

public class ConsultaAlumno extends JDialog {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private JLabel mensajeError2;
	private JTextField textNombre;
	private JTextField textApellido;
	private JTextField textTelefono;
	private JTextField textEmail;
	private DefaultTableModel modelo;
	private IAlumno comunicationAlumno;
	private Map<Integer, Alumno> mapAlumnos;
	private JTable tableAlumnos;
	private PersonalAdministrativo personalAdministrativo;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					ConsultaAlumno window = new ConsultaAlumno(null);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public ConsultaAlumno(PersonalAdministrativo personalAdministrativo) {
		this.personalAdministrativo = personalAdministrativo;
		comunicationAlumno = IAlumno.getInstance();
		this.mapAlumnos = new HashMap<Integer, Alumno>();
		inicialize();
	}

	private void inicialize() {

		setIconImage(Toolkit.getDefaultToolkit().getImage(ConsultaAlumno.class.getResource("/Icon_/User group.gif")));
		setTitle("Consultar Alumnos");
		setResizable(false);
		setBounds(100, 100, 485, 541);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
		getContentPane().setLayout(null);
		setModal(true);
		JLabel lblNombre = new JLabel("Nombre:");
		lblNombre.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblNombre.setBounds(12, 25, 94, 14);
		getContentPane().add(lblNombre);

		JLabel lblApellido = new JLabel("Apellido:");
		lblApellido.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblApellido.setBounds(12, 60, 94, 14);
		getContentPane().add(lblApellido);

		JLabel lblTelefono = new JLabel("Telefono:");
		lblTelefono.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblTelefono.setBounds(12, 95, 94, 14);
		getContentPane().add(lblTelefono);

		JLabel lblEmail = new JLabel("Email:");
		lblEmail.setFont(new Font("Tahoma", Font.BOLD, 11));
		lblEmail.setBounds(12, 130, 94, 14);
		getContentPane().add(lblEmail);

		textNombre = new JTextField();
		textNombre.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent arg0) {
				loadTable();
			}
		});
		textNombre.setBounds(75, 22, 250, 20);
		getContentPane().add(textNombre);
		textNombre.setColumns(10);

		textApellido = new JTextField();
		textApellido.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent arg0) {
				loadTable();
			}
		});
		textApellido.setBounds(75, 55, 250, 20);
		getContentPane().add(textApellido);
		textApellido.setColumns(10);

		textTelefono = new JTextField();
		textTelefono.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent arg0) {
				loadTable();
			}
		});
		textTelefono.setBounds(75, 90, 250, 20);
		getContentPane().add(textTelefono);
		textTelefono.setColumns(10);

		textEmail = new JTextField();
		textEmail.addKeyListener(new KeyAdapter() {
			@Override
			public void keyReleased(KeyEvent arg0) {
				loadTable();
			}
		});
		textEmail.setBounds(75, 125, 250, 20);
		getContentPane().add(textEmail);
		textEmail.setColumns(10);

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(22, 155, 451, 265);
		getContentPane().add(scrollPane);

		tableAlumnos = new JTable(new DefaultTableModel(new Object[][] {}, new String[] { "id", "Nombre", "Apellido", "Telefono", "Email" }));
		tableAlumnos.getColumnModel().getColumn(0).setPreferredWidth(0);
		tableAlumnos.getColumnModel().getColumn(0).setMinWidth(0);
		tableAlumnos.getColumnModel().getColumn(0).setMaxWidth(0);
		scrollPane.setViewportView(tableAlumnos);

		modelo = (DefaultTableModel) tableAlumnos.getModel();

		TableRowSorter<TableModel> rowSorter = new TableRowSorter<TableModel>(modelo);
		tableAlumnos.setRowSorter(rowSorter);
		for (Alumno alumno : comunicationAlumno.getAllAlumnos()) {
			this.mapAlumnos.put(alumno.getId(), alumno);
			String[] arreglo = { alumno.getId().toString(), alumno.getNombre(), alumno.getApellido(), alumno.getTelefono(), alumno.getEmail() };
			modelo.addRow(arreglo);
		}

		JButton btnCancelar = new JButton("Cancelar");
		btnCancelar.setIcon(new ImageIcon(ConsultaAlumno.class.getResource("/Icon_/Erase.gif")));
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				dispose();
			}
		});
		btnCancelar.setBounds(338, 458, 115, 35);
		getContentPane().add(btnCancelar);

		JButton btnSeleccionar = new JButton("Seleccionar");
		btnSeleccionar.setIcon(new ImageIcon(ConsultaAlumno.class.getResource("/Icon_/tick_32.png")));
		btnSeleccionar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				int fila = tableAlumnos.getSelectedRow();
				if (fila >= 0) {
					if (tableAlumnos.getSelectedRow() < 0) {
						mensajeError2.setVisible(true);
					} else {
						dispose();
						String value = (String) tableAlumnos.getValueAt(tableAlumnos.getSelectedRow(), 0);
						CrearContacto newContacto = new CrearContacto(mapAlumnos.get(new Integer(value)), personalAdministrativo);
						newContacto.setVisible(true);
					}
				}
			}
		});
		btnSeleccionar.setBounds(184, 458, 144, 35);
		getContentPane().add(btnSeleccionar);

		JButton btnCrearAlumnoNuevo = new JButton("Registrar Alumno");
		btnCrearAlumnoNuevo.setFont(new Font("Tahoma", Font.BOLD, 12));
		btnCrearAlumnoNuevo.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				CrearAlumno crearAlumno = new CrearAlumno();

				Integer idAlumno = crearAlumno.getAlumno();// TODO generar nuevo contacto.

				Alumno alumno = comunicationAlumno.getAlumno(idAlumno);
				if (alumno != null && alumno.getId() != null) {
					CrearContacto newContacto = new CrearContacto(alumno, personalAdministrativo);
					newContacto.setVisible(true);
				}
			}
		});
		btnCrearAlumnoNuevo.setBounds(12, 456, 162, 35);
		getContentPane().add(btnCrearAlumnoNuevo);

		JLabel label = new JLabel("");
		label.setIcon(new ImageIcon(ConsultaAlumno.class.getResource("/Icon_/User_128.png")));
		label.setBounds(353, 11, 100, 140);
		getContentPane().add(label);
		setVisible(true);
	}

	private void loadTable() {

		this.modelo.setRowCount(0);
		this.mapAlumnos = new HashMap<Integer, Alumno>();
		List<Alumno> alumnos = comunicationAlumno.findAlumnos(textNombre.getText(), textApellido.getText(), textEmail.getText(), textTelefono.getText());
		for (Alumno alumno : alumnos) {
			this.mapAlumnos.put(alumno.getId(), alumno);
			String[] arreglo = { alumno.getId().toString(), alumno.getNombre(), alumno.getApellido(), alumno.getTelefono(), alumno.getEmail() };
			this.modelo.addRow(arreglo);
		}

	}
}
